home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Games / flying-6.11 / real.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-30  |  5.9 KB  |  191 lines

  1. #ifndef _real_h
  2. #define _real_h
  3.  
  4. // copied from math.h
  5. #define M_PI    3.14159265358979323846
  6.  
  7. #if (!REAL_IS_CLASS)
  8. #    if (REAL_IS_FLOAT)
  9.         typedef float Real;
  10. #    else
  11.         typedef double Real;
  12. #    endif
  13. #    define    _RealZero        0.0
  14. #else
  15.  
  16. class Real {
  17.     public:
  18.         Real(const Real &r)           { d=r.d; }
  19.         Real(int l_val)              { d = (double)l_val; }
  20.         Real(double d_val)            { d = d_val; }
  21.         Real()                        { }
  22.         operator double() const       { return (double)d; }
  23. //        operator int() const          { return (int)d; }
  24.  
  25.     const Real& operator=(const Real &z);
  26.  
  27.     inline const Real& operator+=(const Real &z);
  28.     inline const Real& operator+=(double d);
  29.     inline Real Real::operator+(const Real&) const;
  30.     friend inline Real operator+(double, const Real&);
  31.     friend inline Real operator+(const Real&, double);
  32.  
  33.     inline const Real& operator-=(const Real &z);
  34.     inline const Real& operator-=(double d);
  35.     inline Real Real::operator-(const Real&) const;
  36.     friend inline Real operator-(double, const Real&);
  37.     friend inline Real operator-(const Real&, double);
  38.  
  39.     inline const Real& operator*=(const Real &z);
  40.     inline const Real& operator*=(double d);
  41.     inline Real Real::operator*(const Real&) const;
  42.     friend inline Real operator*(double, const Real&);
  43.     friend inline Real operator*(const Real&, double);
  44.  
  45.     inline const Real& operator/=(const Real &z);
  46.     inline const Real& operator/=(double d);
  47.     inline Real Real::operator/(const Real&) const;
  48.     friend inline Real operator/(double, const Real&);
  49.     friend inline Real operator/(const Real&, double);
  50.  
  51.     friend inline int operator==(const Real&, const Real&);
  52.     friend inline int operator!=(const Real&, const Real&);
  53.     friend inline int operator<=(const Real&, const Real&);
  54.     friend inline int operator>=(const Real&, const Real&);
  55.     friend inline int operator< (const Real&, const Real&);
  56.     friend inline int operator> (const Real&, const Real&);
  57.  
  58.     friend inline int operator==(const Real&, double d);
  59.     friend inline int operator!=(const Real&, double d);
  60.     friend inline int operator<=(const Real&, double d);
  61.     friend inline int operator>=(const Real&, double d);
  62.     friend inline int operator< (const Real&, double d);
  63.     friend inline int operator> (const Real&, double d);
  64.  
  65.     inline int  operator!() const    { return (d)?0:1; }
  66.     inline Real operator+() const  { return *this; }
  67.     inline Real operator-() const  { return Real(-d); }
  68.  
  69.     private:
  70. //        Real(    long )        {}
  71. //        Real( int )        {}
  72.  
  73. #if (REAL_IS_FLOAT)
  74.         float        d;
  75. #else
  76.         double    d;
  77. #endif
  78. };
  79.  
  80. //--------------------------------------------------------------------------
  81.  
  82. inline const Real& Real::operator=(const Real &z)
  83. {
  84.             d = z.d;
  85.             return *this;
  86. }
  87.  
  88. inline const Real& Real::operator+=(const Real &z)
  89. {
  90.             d += z.d;
  91.             return *this;
  92. }
  93. inline const Real& Real::operator-=(const Real &z)
  94. {
  95.             d -= z.d;
  96.             return *this;
  97. }
  98. inline const Real& Real::operator*=(const Real &z)
  99. {
  100.             d *= z.d;
  101.             return *this;
  102. }
  103. inline const Real& Real::operator/=(const Real &z)
  104. {
  105.             d /= z.d;
  106.             return *this;
  107. }
  108.  
  109. //--------------------------------------------------------------------------
  110.  
  111. inline int operator==(const Real& z1, const Real& z2)
  112. {       return z1.d == z2.d;     }
  113. inline int operator!=(const Real& z1, const Real& z2)
  114. {       return z1.d != z2.d;     }
  115. inline int operator<(const Real& z1, const Real& z2)
  116. {       return z1.d < z2.d;      }
  117. inline int operator>(const Real& z1, const Real& z2)
  118. {       return z1.d > z2.d;      }
  119. inline int operator<=(const Real& z1, const Real& z2)
  120. {       return z1.d <= z2.d;     }
  121. inline int operator>=(const Real& z1, const Real& z2)
  122. {       return z1.d >= z2.d;     }
  123.  
  124. inline int operator==(const Real& z1, double d)
  125. {       return z1.d == d;     }
  126. inline int operator!=(const Real& z1, double d)
  127. {       return z1.d != d;     }
  128. inline int operator<(const Real& z1, double d)
  129. {       return z1.d < d;      }
  130. inline int operator>(const Real& z1, double d)
  131. {       return z1.d > d;      }
  132. inline int operator<=(const Real& z1, double d)
  133. {       return z1.d <= d;     }
  134. inline int operator>=(const Real& z1, double d)
  135. {       return z1.d >= d;     }
  136.  
  137. //--------------------------------------------------------------------------
  138. inline Real Real::operator+( const Real &z ) const    { Real erg(*this); erg+=z; return erg; }
  139. inline const Real& Real::operator+=(double d)      { return *this+=Real(d); }
  140. inline Real operator+( double d, const Real &z2 )  { return Real(d)+z2; }
  141. inline Real operator+( const Real &z1, double d )  { return z1+Real(d); }
  142.  
  143. inline Real Real::operator-( const Real &z ) const    { Real erg(*this); erg-=z; return erg; }
  144. inline const Real& Real::operator-=(double d)      { return *this-=Real(d); }
  145. inline Real operator-( double d, const Real &z2 )  { return Real(d)-z2; }
  146. inline Real operator-( const Real &z1, double d )  { return z1-Real(d); }
  147.  
  148. inline Real Real::operator*( const Real &z ) const    { Real erg(*this); erg*=z; return erg; }
  149. inline const Real& Real::operator*=(double d)      { return *this*=Real(d); }
  150. inline Real operator*( double d, const Real &z2 )  { return Real(d)*z2; }
  151. inline Real operator*( const Real &z1, double d )  { return z1*Real(d); }
  152.  
  153. inline Real Real::operator/( const Real &z ) const    { Real erg(*this); erg/=z; return erg; }
  154. inline const Real& Real::operator/=(double d)      { return *this/=Real(d); }
  155. inline Real operator/( double d, const Real &z2 )  { return Real(d)/z2; }
  156. inline Real operator/( const Real &z1, double d )  { return z1/Real(d); }
  157. //--------------------------------------------------------------------------
  158.  
  159.  
  160.  
  161. #endif
  162.  
  163. #ifndef RealZero
  164.     extern const Real RealZero;    // Null als Konstante der Klasse
  165. #endif
  166.  
  167.  
  168. class FunTab {
  169.     public:
  170.         FunTab( double (*fkt)(double), double from=0.0, double to=360.0, int step=360 );
  171.         ~FunTab();
  172.  
  173.         const Real &GetVal( const Real &in ) const;
  174.         Real GetRezVal( const Real &in ) const;
  175.  
  176.     private:
  177.         Real *val;
  178.  
  179.         Real         from;
  180.         Real        to;
  181.         int        step;
  182.         Real        interval;
  183. };
  184.  
  185. extern "C" {
  186. double floor( double x );            // aus math.h
  187. }
  188. inline int rtoi(const Real &r)     { return (int)floor((double)r+0.5); }
  189.  
  190. #endif
  191.